import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Toolkit;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

/*Clase principal de la ventana del juego*/
@SuppressWarnings("serial")
public class JuegoJFrame extends JFrame  {
	
	GamePanel gamepanel;
	ControladordeBotones controladordeBotones;
	ControladorDeMovimiento controlador;
	Juego juego;
	public JButton botonnuevo ;

	public JuegoJFrame(){
		/*Constructor, fija dimensiones basicas y crea las intancia de los controladores*/
		super("Love game for Veronica Valerio");
		controlador = new ControladorDeMovimiento();
		controladordeBotones = new ControladordeBotones(this);
		
		//Configuraciones Generales
		setBounds(200,200,400,500);
		this.setPreferredSize(new Dimension(400,600));
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);	
		setResizable(false);

		//Estetica del menu
		Container contentpane = getContentPane();
		contentpane.setLayout(new GridLayout(4,1));
		contentpane.setBackground(Color.white);

		//botones
		botonnuevo = new JButton("Nuevo Juego");
		botonnuevo.addActionListener(controladordeBotones);

		//Agregar al Panel
		JPanel panellabel= new JPanel();
		JPanel panelbotonnuevo= new JPanel();
		JPanel panellabelbot= new JPanel();
		
		panelbotonnuevo.add(botonnuevo);
		
		contentpane.add(panellabel);
		contentpane.add(panelbotonnuevo);
		contentpane.add(panellabelbot);
		
		this.pack();
		
		Toolkit.getDefaultToolkit().sync();
		
	}
	
	/*Llamado del controlador para iniciar el juego nuevo*/
	public void juegoNuevo() {
		juego = new Juego();
		comenzarJuego();	
	}
	
	/*Comienza un nuevo Juego al igual q un mainloop y un paintloop*/
	@SuppressWarnings("unused")
	private void comenzarJuego(){
		
		setFocusable(true);
		requestFocusInWindow();
		
		//imprimirprespalsh();
		this.getContentPane().removeAll();
		
		//Agregar el panel del juego
		gamepanel = new GamePanel(juego);
		this.getContentPane().setLayout(new BorderLayout());
		this.getContentPane().add(gamepanel);
		
		//Darle foco al controlador de teclas
		controlador.setJuego(juego);
		gamepanel.setFocusable(true);
		gamepanel.requestFocusInWindow();
		gamepanel.addKeyListener(controlador);
		
		//Iniciar mainloop y paintloop
		MainLoop mainloop = new MainLoop(juego);
		Repainter repainter = new Repainter(gamepanel);

		this.paintAll(getGraphics());
		this.repaint();
		
		Toolkit.getDefaultToolkit().sync();
	}	
	
	/*Hilo encargado de repintar el gamepanel*/
	private class Repainter extends Thread{
		GamePanel gamepanel;
		Repainter(GamePanel gamepanel){
			this.gamepanel = gamepanel;
			start();
		}
		public void run(){
			while (true){
				try {Thread.sleep(15);} 
				catch (InterruptedException e) {e.printStackTrace();}
				gamepanel.repaint();
			}
		}
	}
}